
import { app, BrowserWindow, Menu, screen, Tray, ipcMain } from 'electron'
import path from 'path'
import { fileURLToPath } from 'url';
import isDev from 'electron-is-dev';
const __dirname = path.dirname(fileURLToPath(import.meta.url));

// 是否是生产环境
const isPackaged = app.isPackaged;

// 禁止显示默认菜单
Menu.setApplicationMenu(null);
ipcMain.on('test', () => {
  mainWindow.hide()
})
// 主窗口
let mainWindow, tray

const createWindow = () => {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    // 默认窗口标题，如果由loadURL()加载的HTML文件中含有标签<title>，此属性将被忽略。
    title: "Electron + Vue3",
    // width: 800,
    // height: 600,
    // 设置窗口尺寸为屏幕工作区尺寸
    width: screen.getPrimaryDisplay().workAreaSize.width,
    height: screen.getPrimaryDisplay().workAreaSize.height,
    // 设置最小尺寸
    minWidth: 800,
    minHeight: 600,
    // 窗口图标。 在 Windows 上推荐使用 ICO 图标来获得最佳的视觉效果, 默认使用可执行文件的图标.
    // 在根目录中新建 build 文件夹存放图标等文件
    icon: path.join(__dirname, '../images/icon.jpg'),
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
      enableRemoteModule: true
    },
  });
  let icon = path.join(__dirname, '../images/icon.jpg')
  tray = new Tray(icon)
  tray.setToolTip('猴哥')

  tray.on('click', () => {       //点击图标的响应事件，这里是切换主窗口的显示和隐藏
    if (mainWindow.isVisible()) {
      mainWindow.hide()
    } else {
      mainWindow.show()
    }
  })

  tray.on('right-click', () => {    //右键点击图标时，出现的菜单，通过Menu.buildFromTemplate定制，这里只包含退出程序的选项。
    let menu = [
      {
        label: '退出',
        click: () => app.quit()
      }
    ]
    if (mainWindow.isVisible()) {
      menu.unshift({
        label: '最小化',
        click: () => mainWindow.hide()
      },)
    }
    const menuConfig = Menu.buildFromTemplate(menu)
    tray.popUpContextMenu(menuConfig)
  })
  // 开发环境下，打开开发者工具。
  if (!isPackaged) {
    mainWindow.webContents.openDevTools();
  }
  // 使用 loadURL 加载我们刚才创建的 Vue 项目地址
  const url = isDev ? "http://localhost:5173/" : `file://${path.join(__dirname,), '/build/index.html'}`
  mainWindow.loadURL(url);
};

// 在应用准备就绪时调用函数
app.whenReady().then(() => {
  createWindow();

  app.on("activate", () => {
    // 通常在 macOS 上，当点击 dock 中的应用程序图标时，如果没有其他
    // 打开的窗口，那么程序会重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此，通常对程序和它们在任务栏上的图标来说，应当保持活跃状态，直到用户使用 Cmd + Q 退出。
app.on("window-all-closed", () => {
  if (process.platform !== "darwin") app.quit();
});

// 如果开发环境使用了 nginx 代理，禁止证书报错
if (!isPackaged) {
  // 证书的链接验证失败时，触发该事件
  app.on(
    "certificate-error",
    function (event, webContents, url, error, certificate, callback) {
      event.preventDefault();
      callback(true);
    }
  );
}
